// 引入Mongoose
const mongoose = require('mongoose')
// 声明schema
const Schema = mongoose.Schema
// 声明object类型
let ObjectId = Schema.Types.ObjectId
// 引入加盐操作
const bcrypt = require('bcrypt')
// 加盐的级别
const SALT_WORK_FACTOR = 10

// 创建用户Schema
const userSchema = new Schema({
    UserId:ObjectId,
    userName:{unique:true,type:String},
    password:String,
    createAt:{type:Date,default:Date.now()},
    lastLoginAt:{type:Date,default:Date.now()}
},
// {
//     collation:'user'
// }
)

// 使用pre对每次加入数据之前做加盐加密处理
userSchema.pre('save',function(next){
    bcrypt.genSalt(SALT_WORK_FACTOR,(err,hash)=>{
        if(err) return next(err)
        this.password = hash
        next()
    })
})

userSchema.methods = {
    // 密码对比的方法
    comparePassword:(_password,password)=>{
        return new Promise((resolve,reject)=>{
            bcrypt.compare(_password,password,(err,isMatch)=>{
                if(!err) resolve(isMatch)
                else reject(err)
            })
        })
    }
}

// 发布模型
mongoose.model('User',userSchema)